package it.unibo.refolding.pico;


public interface NanoDriver {
	
	void zScanStartM(double value);
	
	/**
	 * Couldn't find another way to change to a value in nm or um. It always seems to take the
	 * number and assume that the unit of measurement has not been changed. That is, to go from
	 * 2.180 um/s to 513 nm/s one has to type 0.513. Instead to go from 969 nm/s to 513 nm/s one
	 * has to type 513.
	 */
	void reverseVelocityNmOrUmPerS(double value);

	void rampSizeM(double rampSizeM);

	void single();

	void surfaceDelay(double surfaceDelayS);

	void runScript();

	void startRampColumn1(double m);

	void endRampColumn1(double zScanStartM);

	void velocityColumn1(double velocityMPerS);

	void delayColumn1(double s);

	void deltaColumn2(double m);

	void deltaColumn3(double m);

	void loopCountColumn3(int count);

	void captureButton();

	void quitStripChart();

	void resetStripChart();
	
	void sleep(double timeS);

	void xOffsetM(double value);

	void continuous();

	void stop();

	void velocityColumn2(double velocityMPerS);
	
	void velocityColumn3(double velocityMPerS);

	void forceMode();

	void scriptMode();

	void startStripChart();
	
	boolean startOrPauseStripChartPixelIsRed();

	void scanRate(double scanRateHz);

	void numberOfSamples(int numberOfSamples);
	
	void captureContinuous();
	
	void abortCapture();
	
	void ping();
	
  void setupSingleScript(
    double startRampColumn1, double endRampColumn1, double velocityColumn1, double delayColumn1,
    double velocityColumn2, double deltaColumn2, double velocityColumn3, double deltaColumn3,
    int loopCountColumn3);
  
  void captureButtonResetStripChart();
  
  void startStripChartQuitStripChartForceMode();
  
  void zScanStartMScriptModeStartStripChart(double zScanStartM);
  
  void forceModeXOffsetScriptMode(double xOffsetM);

  void waitWhileStartOrPauseIsNotRed();
}
